import java.util.ArrayList;
import java.util.List;

/***
 * 5. 装配类（Assembly）
 * 表示一组零件的组合，负责管理零件并验证其合法性。
 * 
 * 说明：
 * parts 存储已添加的零件。
 * addPart 方法在添加新零件时，检查它与所有现有零件的配对是否满足规则。
 */
public class Assembly {
    private final List<Part> parts;
    private final RuleEngine ruleEngine;

    public Assembly(RuleEngine ruleEngine) {
        this.parts = new ArrayList<>();
        this.ruleEngine = ruleEngine;
    }

    // 添加零件到装配
    public boolean addPart(Part part) {
        // 检查新零件与现有零件是否兼容
        for (Part existingPart : parts) {
            if (!ruleEngine.validatePair(part, existingPart)) {
                return false;
            }
        }
        parts.add(part);
        return true;
    }

    // 获取当前装配的零件
    public List<Part> getParts() {
        return new ArrayList<>(parts);
    }
}